<?php
namespace Exam\Object;

use Tsy\Library\Object;
/**
 * 方案
 * @package Exam\Object
 */
class PlanObject extends Object
{
    
    /**

     * 方案ID FID int(11) 自增 主键 必填  
     * 选择题个数 DXnumber int(11)   必填  
     * 选择题分数 DXscore int(11)   必填  
     * 填空题分数 DDXnumber int(11)   必填  
     * 填空题个数 DDXscore int(11)   必填  
     * 大题分数 DTnumber int(11)   必填  
     * 大题个数 DTscore int(11)   必填  
     * 判断题个数 PDnumber int(11)   必填  
     * 判断题分数 PDscore int(11)   必填  
     * 方案名称 Name char(50)     
     * 描述 Note varchar(2000)     
     *总分 Score 总分在未设定的情况下默认为100分。
     */
    /**
     * @var string
     */
    protected $main='Plan';
    protected $pk='FID';
    public $addFields=['DXnumber','DXscore','DDXnumber','DDXscore','DTnumber','DTscore','PDnumber','PDscore','Name','Note','Score',];//允许添加的字段，如果数组最后一个元素值为true则表示排除
    public $saveFields=['DXnumber','DXscore','DDXnumber','DDXscore','DTnumber','DTscore','PDnumber','PDscore','Name','Note','Score',];//允许修改的字段，如果数组最后一个元素值为true则表示排除
    public $addFieldsConfig=[
    
//      'DXnumber'=>[//字段名称:选择题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 选择题个数(DXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 选择题个数(DXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 选择题个数(DXnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 选择题个数(DXnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DXscore'=>[//字段名称:选择题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 选择题分数(DXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 选择题分数(DXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 选择题分数(DXscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 选择题分数(DXscore) 的值是否存在，取该值或该函数的值
//      ],

//      'DDXnumber'=>[//字段名称:填空题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 填空题分数(DDXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 填空题分数(DDXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 填空题分数(DDXnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 填空题分数(DDXnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DDXscore'=>[//字段名称:填空题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 填空题个数(DDXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 填空题个数(DDXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 填空题个数(DDXscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 填空题个数(DDXscore) 的值是否存在，取该值或该函数的值
//      ],

//      'DTnumber'=>[//字段名称:大题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 大题分数(DTnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 大题分数(DTnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 大题分数(DTnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 大题分数(DTnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DTscore'=>[//字段名称:大题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 大题个数(DTscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 大题个数(DTscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 大题个数(DTscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 大题个数(DTscore) 的值是否存在，取该值或该函数的值
//      ],

//      'PDnumber'=>[//字段名称:判断题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 判断题个数(PDnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 判断题个数(PDnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 判断题个数(PDnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 判断题个数(PDnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'PDscore'=>[//字段名称:判断题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 判断题分数(PDscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 判断题分数(PDscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 判断题分数(PDscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 判断题分数(PDscore) 的值是否存在，取该值或该函数的值
//      ],

//      'Name'=>[//字段名称:方案名称,数据类型:char(50),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 方案名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 方案名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 方案名称(Name) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 方案名称(Name) 的值是否存在，取该值或该函数的值
//      ],

//      'Note'=>[//字段名称:描述,数据类型:varchar(2000),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 描述(Note) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 描述(Note) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 描述(Note) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 描述(Note) 的值是否存在，取该值或该函数的值
//      ],


    ];
    public $saveFieldsConfig=[
    
//      'DXnumber'=>[//字段名称:选择题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 选择题个数(DXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 选择题个数(DXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 选择题个数(DXnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 选择题个数(DXnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DXscore'=>[//字段名称:选择题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 选择题分数(DXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 选择题分数(DXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 选择题分数(DXscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 选择题分数(DXscore) 的值是否存在，取该值或该函数的值
//      ],

//      'DDXnumber'=>[//字段名称:填空题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 填空题分数(DDXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 填空题分数(DDXnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 填空题分数(DDXnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 填空题分数(DDXnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DDXscore'=>[//字段名称:填空题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 填空题个数(DDXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 填空题个数(DDXscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 填空题个数(DDXscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 填空题个数(DDXscore) 的值是否存在，取该值或该函数的值
//      ],

//      'DTnumber'=>[//字段名称:大题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 大题分数(DTnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 大题分数(DTnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 大题分数(DTnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 大题分数(DTnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'DTscore'=>[//字段名称:大题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 大题个数(DTscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 大题个数(DTscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 大题个数(DTscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 大题个数(DTscore) 的值是否存在，取该值或该函数的值
//      ],

//      'PDnumber'=>[//字段名称:判断题个数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 判断题个数(PDnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 判断题个数(PDnumber) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 判断题个数(PDnumber) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 判断题个数(PDnumber) 的值是否存在，取该值或该函数的值
//      ],

//      'PDscore'=>[//字段名称:判断题分数,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 判断题分数(PDscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 判断题分数(PDscore) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 判断题分数(PDscore) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 判断题分数(PDscore) 的值是否存在，取该值或该函数的值
//      ],

//      'Name'=>[//字段名称:方案名称,数据类型:char(50),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 方案名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 方案名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 方案名称(Name) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 方案名称(Name) 的值是否存在，取该值或该函数的值
//      ],

//      'Note'=>[//字段名称:描述,数据类型:varchar(2000),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 描述(Note) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 描述(Note) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 描述(Note) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 描述(Note) 的值是否存在，取该值或该函数的值
//      ],

    ];
    protected $property=[
        
    ];
    protected $link=[
       
    ];
    protected $searchFields=['FID','DXnumber','DXscore','DDXnumber','DDXscore','DTnumber','DTscore','PDnumber','PDscore','Name','Note',];
    protected $searchTable='Plan';
    protected $searchWFieldsConf=[
        'Plan'=>'Plan',        
    ];
    protected $searchWFieldsGroup=[
        'Plan'=>['FID','DXnumber','DXscore','DDXnumber','DDXscore','DTnumber','DTscore','PDnumber','PDscore','Name','Note',],
    ];

    /**
     * 添加一个方案，要求所给题目个数和题目分数均大于0，且总分要为100分。
     * @param array $data
     * @param bool $Properties
     * @param bool $OnlyPK
     * @return array|bool|mixed|string
     */
   function add($data=[],$Properties=false,$OnlyPK=false)
    {
        $data = array_merge($data,$_POST);
        if ($data['Score']){
            if ($data['Score'] <0){
                return '总分设定有误,总分为：'.$data['Score'];
            }
        }else{
            $data['Score'] = 100;
        }
        $Keys =[
            'DXnumber',
            'DXscore',
            'DDXnumber',
            'DDXscore',
            'DTnumber',
            'DTscore',
            'PDnumber',
            'PDscore',
            'ZGnumber',
            'ZGscore',
        ];
        $temp = [
            'DXnumber'=>0,
            'DXscore'=>0,
            'DDXnumber'=>0,
            'DDXscore'=>0,
            'DTnumber'=>0,
            'DTscore'=>0,
            'PDnumber'=>0,
            'PDscore'=>0,
            'ZGnumber'=>0,
            'ZGscore'=>0,
        ];
        foreach ($Keys as $key){
            $k=$key;
            $s=$data[$key];
            if (isset($data[$key])){
                if ($data[$key]<0){
                    return "方案中 $key 的数据为$data[$key] ,有误";
                }
                else{
                  $temp[$key] = $data[$key];
                }
            }
        }
        $temp = array_values($temp);
        $sum = 0;
        for($i=0; $i<4; $i++){
            $sum+=($temp[$i*2] * $temp[$i*2+1]);
        }
        if ($sum !=$data['Score']){
            return "该方案经运算后总分为$sum 与预定总分不符，添加失败";
        }
        return parent::add($data, $Properties, $OnlyPK); // TODO: Change the autogenerated stub
    }

    function save($ID = false, $Params, $Properties = false, $OnlyPK = false)
    {
        $data = M("plan")->where('FID=%d',$_POST['FID'])->find();
        if ($data){
            $data = array_merge($data,$Params);
            $Keys =[
                'DXnumber',
                'DXscore',
                'DDXnumber',
                'DDXscore',
                'DTnumber',
                'DTscore',
                'PDnumber',
                'PDscore',
            ];
            $temp = [
                'DXnumber'=>0,
                'DXscore'=>0,
                'DDXnumber'=>0,
                'DDXscore'=>0,
                'DTnumber'=>0,
                'DTscore'=>0,
                'PDnumber'=>0,
                'PDscore'=>0,
            ];
            if ($data['Score']){
                if ($data['Score'] <0){
                    return '总分设定有误,总分为：'.$data['Score'];
                }
            }
            foreach ($Keys as $key){
                if (isset($data[$key])){
                    if ($data[$key]<0){
                        return "方案中 $key 的数据为$data[$key] ,有误";
                    }
                    else{
                        $temp[$key] = $data[$key];
                    }
                }
            }
            $temp = array_values($temp);
            $sum = 0;
            for($i=0; $i<4; $i++){
                $sum+=($temp[$i*2] * $temp[$i*2+1]);
            }
            if ($sum !=$data['Score']){
                return "该方案经运算后总分为$sum 与预定总分不符，修改失败";
            }
            return parent::save($_POST['FID'],$Params);
        }else{
            return '未能从数据库中查询到该ID对应的数据';
        }
        return parent::save($ID, $Params, $Properties, $OnlyPK); // TODO: Change the autogenerated stub
    }

}